package generator.main;
import java.sql.Connection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.dom4j.Element;
import freemarker.template.Configuration;
import generator.main.bean.Table;
import generator.main.bean.TableField;
import generator.main.utils.ConfigFileUtils;
import generator.main.utils.ConfigurationUtils;
import generator.main.utils.DBconcetion;
import generator.main.utils.ElementUtils;
/**
 * 代码生成器 ，运行MAIN方法
 * getConnection    					获取数据库连接  
 * getConeratorConfigXMLRootElement		获取生成文件的根节点
 * getDBMappingEntity                   根据读取到的表名，库名，映射出表类型，名称，备注   
 * getConfiguration						创建freemark模版
 * getTableField						查询出表所有类型，字段	
 * writerFile							文件生成		
 * @author 郭军辉
 *
 * 2017年8月13日上午3:44:58
 */
public class Main {

	public static void main(String[] args) {

		try {
			
			System.out.println("================数据库连接开始======================");
			Connection con = DBconcetion.getConnection("source/db.properties");
			System.out.println("================数据库连接结束======================");
			/** 读取xml需要生成的配置文件 */
			System.out.println("================读取模版开始======================");
			Element rootElement = ConfigFileUtils.getConeratorConfigXMLRootElement("source\\generatorConfig.xml");
			System.out.println("================读取模版结束======================");
			/** 根据xml配置文件读取到的表名称，库名称，去查询表字段 */
			List<Table> modelList = ElementUtils.getDBMappingEntity(rootElement);
			/** 获取模版 */
			Configuration configuration = ConfigurationUtils.getConfiguration("template/frame/");
			/** 获取配置文件里的数据库类型*/
			Properties  properties=	DBconcetion.getProperties("source/db.properties");
			/** 获取数据库类型*/
			String dbType= properties.getProperty("dbType");
			for (Table table : modelList) {
				Map<String, List<TableField>> fieldMap = DBconcetion.getTableField(con, table,dbType);
				/** 代码生成开始 */
				ConfigurationUtils.writerFile(fieldMap, table, configuration);
			}
			System.out.println("生成成功！");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
